void main() {
  //1、forEach
  List<String> colorList = ['red', 'yellow', 'blue', 'green'];
  colorList.forEach((color) => print(color));
  //2、map,map是Iterable的方法
  Iterable<String> iterable = colorList.map((item) => item + "-1");
  List<String> colorList1 = List.from(iterable);
  print(colorList1);//[red-1, yellow-1, blue-1, green-1]
  List<String> colorList2 = colorList.map((item) => item + "-2").toList();
  print(colorList2);//[red-2, yellow-2, blue-2, green-2]
  List<String> colorList3 = colorList.map((item){
    return item + '-3';//()==>expr与(){return expr}等价的
  }).toList();
  print(colorList3);//[red-2, yellow-2, blue-2, green-2]
  //3、查询类函数
  /**
   *  every
   *  any
   *  where，返回符合条件的子集合
   *  firstWhere，返回符合条件的第一个元素，如果没找到执行orElse，如果没有orElse，异常:Bad state: No element
   *  lastWhere，反向查询，返回符合条件的第一个元素，如果没找到执行orElse，如果没有orElse，异常:Bad state: No element
   *  singleWhere, 返回符合条件的第一个元素，如果没找到执行orElse，如果没有orElse，异常:Bad state: No element 
   *               如果符合条件元素有多个，异常：Bad state: Too many elements
   *  take(n),表示取当前集合前n个元素
   *  takeWhile 会选取满足条件的集合，一旦遇到不满足条件的会中止搜索
   *  skip(n),表示跳过前n个元素,然后取剩余所有的元素
   *  skipWhile,只要满足指定的条件，就跳过序列中的元素，然后返回剩余元素
   *  retainWhere，按条件保留剩余元素
   *
   *  。。。。还很多，不一一列举
   */
  List<int> intList = [2, 3, 5];
  print(intList.every((value) => value > 3));//false
  print(intList.any((value) => value > 3));//true
  print(intList.where((value) => value > 3).toList());//[5]
  int findValue1 = intList.firstWhere((value) => value > 2);
  print(findValue1);//3
//  int findValue2 = intList.firstWhere((value) => value > 5);
//  print(findValue2);//异常，Bad state: No element
  int findValue3 = intList.firstWhere((value) => value > 5, orElse: () => -1);
  print(findValue3);//-1
//  int findValue4 = intList.singleWhere((value) => value > 2, orElse: () => -1);//异常，Bad state: Too many element
//  print(findValue4);//3
  int findValue5 = intList.singleWhere((value) => value == 2, orElse: () => -1);
  print(findValue5);//2
  List<int> subList1 = intList.take(2).toList();
  print(subList1);
  List<int> subList2 = intList.skip(2).toList();
  print(subList2);
}
